昨天介紹了契約測試 (Contract Testing),今天我們將把測試思維提升到另一個層次:規格驅動開發 (Spec-Driven Development, SDD)。我們會透過 GitHub 的開源工具 spec-kit,打造一個簡單的使用者註冊服務,並由 AI 根據規格自動產生單元測試、整合測試與 E2E 測試。我們會透過分階段完成並且控制任務的數量,來逐漸完成開發流程和控制 token 的消耗量。
規格驅動開發(Spec-Driven Development, SDD)是一種將正式的產品規格檔案作為整個開發流程核心的方法論。不同於傳統的程式碼先行,SDD 強調在動手寫程式碼之前,先定義好專案的目標、動機與技術細節。spec-kit 的出現,正解決 SDD 的最大痛點:如何將一份靜態的規格檔案,自動轉化為可執行的程式碼?他的核心是:它將規格檔案視為活的資產(Living Document),透過 AI Agent,它能自動從這份規格檔案中,產生 API Client、資料模型(Model)、型別定義(Type),甚至是測試腳本的骨架。
spec-kit 是一個 Python 工具,但你可以透過 uvx 這個工具,直接在你的專案中安裝。這條指令會自動為你建立一個包含所有必要範本和組態的專案目錄,以本篇文章的專案「examples-order-spec-kit」
uvx --from git+https://github.com/github/spec-kit.git specify init <專案名稱>
如果沒有指定 AI 模型,在初始化專案的時候,會需要選擇你的 AI assistant,這篇文章主要會以 GitHub Copilot 為主,下一步會選擇使用的 script type,如果是 Linux 基礎的 OS 就選擇 sh,如果是 windows 就選擇 ps (PowerShell)。
如果建立成功則會看到 "Project ready" 的字,並且告訴你剛剛的設定和接下來的有哪些命令可以使用。
但如果一開始不想創建專案,可以透過下列指令安裝 spec-kit 然後再使用 specify init 建立專案,這跟上面是一樣的。
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init <PROJECT_NAME>
specify check
spec-kit 的開發流程可以分為下列幾個階段,透過 GitHub Chat 輸入指令的方式,驅動整個開發流程。
建立專案核心原則與準則,是團隊的「開發價值觀」或「工程守則」。
/constitution 建立一份以「程式品質、測試標準、使用者體驗一致性、效能需求」為核心的原則文件。
這是整個流程的起點。我們會使用 /specify 指令,向 AI Agent 提供一個高層次的需求描述。
你的指令:
/specify 建立一個使用者註冊服務,包含電子郵件驗證和密碼加密。
AI 產出:AI Agent 會根據你的描述,生成一份詳細的規格檔案,包含 API 端點、資料模型、驗收條件和錯誤處理。
有了規格檔案後,我們需要一個技術藍圖。我們會使用 /plan 指令,告訴 AI Agent 我們選擇的技術棧(例如:使用 TypeScript、Playwright 和 PostgreSQL)。
你的指令:
/plan 根據規格檔案,建立一個基於 TypeScript 和 Playwright 的測試專案。
AI 產出:AI Agent 會根據你的技術選擇,生成詳細的技術實作規劃,包括專案結構、所需的函式庫和架構設計。
你的指令:
/tasks 根據規劃,拆解出測試程式碼的任務清單。
AI 產出:AI Agent 會生成一個任務清單,例如「建立 UserRepository」、「撰寫 POST /register 的測試案例」等,這些任務可以直接交給 AI 執行。
/implement
# 1. 初始化專案
uvx --from git+https://github.com/github/spec-kit.git specify init examples-order-spec-kit
cd login-order-system
# 2. 建立專案憲章
/constitution 建立以品質、測試、UX、效能為核心的原則
# 3. 撰寫規格
/specify 建立登入與訂單管理的 API 系統(含 JWT)
# 4. 產生技術藍圖
/plan 使用 TypeScript、Express、Prisma、Playwright
# 5. 生成任務
/tasks 根據規劃拆解實作項目
# 6. 執行實作
/implement
spec-kit 會根據我們的規範和規格,列出任務並逐步完成。在使用過程中,有幾個關鍵的最佳實務可以確保流程更順暢:
規範檔案 | 用途 |
---|---|
specs/frontend-constitution.md | 前端開發原則(UX / Accessibility) |
specs/backend-constitution.md | 後端 API 標準(Security / Logging / Contract) |
specs/testing-constitution.md | 測試規範(Coverage / CI / Reporting) |
此外,還有兩個重要的指令可以幫助你更有效地使用 Spec-Kit:
/clarify:釐清「規格」中的模糊地帶
/clarify 是一個互動式的指令,它的主要功能是檢查你撰寫的 /specify 規格檔案,找出其中所有可能存在的模糊、不完整或有歧義的地方,並透過提問的方式,幫助你補充細節。這就像在動手畫藍圖之前,先確保建築師和客戶之間沒有任何誤解。
/analyze:檢查「規格、計畫、任務」之間的一致性
/analyze 是一個靜態分析的指令,它的功能是檢查整個 SDD 工作流程中的所有檔案,確認它們之間是否一致、完整且符合規範。它會確保你的技術方案能完整實現所有功能,並且所有任務都與規劃相符,讓你能在 AI 開始大規模生成程式碼之前,發現並修復所有潛在問題。
我們學習了如何透過 spec-kit 這個開源工具,將「規格驅動開發」的理念推向了極致。它將一個抽象的規格檔案,透過 AI Agent 的協作,產生程式碼與測試。不過,在每個階段都需要調整,想要一步到位可能還需要調整 spec 文件,不過,隨著 spec-kit 工具和 AI Agent 慢慢的完善,或許將來只需要告訴 AI 團隊的規範就可以產生相對的功能和測試。